# -*- coding: utf-8 -*-
import reimport timefrom legendaryPowerScript.creatures import Stat, Creaturefrom mod_log import loggerfrom legendaryPowerScript._lpcommon.vector import Vectorfrom legendaryPowerScript.mob.mobSkillTargeter import *from legendaryPowerScript.spell._spells.spell import Spell, AOESpell, ModifierSet, conditionsimport mod.server.extraServerApi as serverApifrom .._lpcommon import vectorclass MobType:
    """
    怪物的类型
    """

    def __init__(self, id, data):
        """

        Attributes:
            - id (int): 怪物类型的唯一标识符。
            - displayName (str): 怪物类型的显示名称。
            - point (str): 分数。
            - playDeathCloud (bool): 是否播放死亡烟雾。
            - engineType (str): 引擎类型。
            - templateName (str): 模板名称。
            - increaseElite (float): 增加精英刷新率。
            - multiplier (float): 模板倍率。
            - stat (dict[str, Stat]): 属性字典。
            - baseStats (dict[str, Stat]): 基础属性字典。
            - equipments (str): 装备。
            - alwaysAirborne (bool): 是否总是在空中。
            - syncHealth (None或str): 同步生命。
            - regenHealth (bool): 自动回血。
            - preventShoot (bool): 是否阻止射击。
            - autoAttack (bool): 是否自动攻击过近敌人。
            - attackSfx (bool): 是否有攻击特效。
            - suggestion (str): 击杀提示。
            - attackKarmaMinimum (None或str): 主动攻击的最低罪恶值。
            - minions (str): 召唤物。
            - invincible (bool): 是否免疫伤害。
            - invincible2Player (bool): 是否免疫玩家伤害。
            - blockAI (bool): 是否禁用AI。
            - checkLos (bool): 是否检测视线。
            - recordDamageComposition (bool): 是否记录伤害构成。
            - setBarriersAbove (str): 在上方设置屏障。
            - pushable (bool): 是否可推动。
            - icon (None或str): 交互图标。
            - interactText (None或str): 交互文字。
            - spawnAtBlockCenter (bool): 是否生成于方块中央。
            - collisionSize (None或str): 碰撞箱。
            - scale (float): 体型大小。
            - deathDuration (None或str): 死亡动画时间。
            - lookAtNearestPlayer (bool): 是否自动看向附近玩家。
            - lookYawOffset (int): 自动看向偏移。
            - yearMultiplier (float): 年份倍率。
            - skills (dict[str, list[MobSpellLine or MobSpellSection]]): 技能字典。
            - spellNames (str): 魔法名称。
            - isPersistant (bool): 是否持久化。
            - attackSound (str): 攻击音效。
            - hurtSound (str): 受击音效。
            - deathSound (str): 死亡音效。
            - level (int): 等级。
            - model (None或str): 模型。
            - modelTexture (None或str): 模型材质。
            - windup (float): 攻击前摇。
            - winddown (float): 攻击后摇。
            - range (float): 攻击距离。
            - angle (int): 攻击角度。
            - lookAtTaskId (None或str): 自动看向任务ID。
            - walkAnimation (None或str): 行走动画。
            - standAnimation (None或str): 站立动画。
            - attackAnimation (None或str): 攻击动画。
            - freezeWhileAttack (bool): 攻击时是否停止移动。
            - modelAttachments (None或dict): 模型附件。
            - tagHandlers (None或list): 词条处理器列表。
        """
        self.id = 0  # type: int
        self.displayName = ""  # type: str
        self.point = ""  # type: str
        self.playDeathCloud = False  # type: bool
        self.engineType = ""  # type: str
        self.templateName = ""  # type: str
        self.increaseElite = 0.0  # type: float
        self.multiplier = 0.0  # type: float
        self.stat = {}  # type: dict[str, Stat]
        self.baseStats = {}  # type: dict[str, Stat]
        self.equipments = ""  # type: str
        self.alwaysAirborne = False  # type: bool
        self.syncHealth = None或str()  # type: None或str
        self.regenHealth = False  # type: bool
        self.preventShoot = False  # type: bool
        self.autoAttack = False  # type: bool
        self.attackSfx = False  # type: bool
        self.suggestion = ""  # type: str
        self.attackKarmaMinimum = None或str()  # type: None或str
        self.minions = ""  # type: str
        self.invincible = False  # type: bool
        self.invincible2Player = False  # type: bool
        self.blockAI = False  # type: bool
        self.checkLos = False  # type: bool
        self.recordDamageComposition = False  # type: bool
        self.setBarriersAbove = ""  # type: str
        self.pushable = False  # type: bool
        self.icon = None或str()  # type: None或str
        self.interactText = None或str()  # type: None或str
        self.spawnAtBlockCenter = False  # type: bool
        self.collisionSize = None或str()  # type: None或str
        self.scale = 0.0  # type: float
        self.deathDuration = None或str()  # type: None或str
        self.lookAtNearestPlayer = False  # type: bool
        self.lookYawOffset = 0  # type: int
        self.yearMultiplier = 0.0  # type: float
        self.skills = dict[str, list[MobSpellLine or MobSpellSection]]()  # type: dict[str, list[MobSpellLine or MobSpellSection]]
        self.spellNames = ""  # type: str
        self.isPersistant = False  # type: bool
        self.attackSound = ""  # type: str
        self.hurtSound = ""  # type: str
        self.deathSound = ""  # type: str
        self.level = 0  # type: int
        self.model = None或str()  # type: None或str
        self.modelTexture = None或str()  # type: None或str
        self.windup = 0.0  # type: float
        self.winddown = 0.0  # type: float
        self.range = 0.0  # type: float
        self.angle = 0  # type: int
        self.lookAtTaskId = None或str()  # type: None或str
        self.walkAnimation = None或str()  # type: None或str
        self.standAnimation = None或str()  # type: None或str
        self.attackAnimation = None或str()  # type: None或str
        self.freezeWhileAttack = False  # type: bool
        self.modelAttachments = {}  # type: None或dict
        self.tagHandlers = []  # type: None或list
        pass

    def rebuildSpells(self):
        # type: () -> None
        """
        重新构建怪物的技能列表。

        参数：
            无

        返回：
            无
        """
        pass

    def spawn(self, location, trigger=None, level=None, power=None, rotation=None):
        # type: (Vector, Creature, float, float) -> ActiveMob
        """
        在给定位置生成怪物实体。

        参数：
            location (Vector)：生成位置向量。
            trigger (Creature, optional)：触发生成怪物的战斗者。
            level (float, optional)：怪物的等级。
            power (float, optional)：怪物的战斗力。
            rotation (tuple, optional)：怪物的旋转角度。

        返回：
            ActiveMob：生成的怪物实体。
        """
        pass

    def instantiate(self, creature, trigger=None, level=None, power=None, spawnLoc=None):
        # type: (ActiveMob, None or Creature, None或int, None或float, None或Location) -> ActiveMob
        """
        初始化怪物实体

        参数：
            creature (ActiveMob)：要初始化的怪物实体。
            trigger (None or Creature)：怪物的召唤者。
            level (None或int)：怪物的等级。
            power (None或float)：怪物的能力值。
            spawnLoc (None或Location)：怪物生成的位置。

        返回：
            mob (ActiveMob)：创建的活跃怪物对象。
        """
        pass

class MobSpellSection:
    """
    怪物的技能。

    参数：
        - typeName (str)：怪物类型名称
        - section (dict)：怪物技能的配置信息

    属性：
        - typeName (str)：怪物类型名称
        - spell (Spell)：技能对象，表示怪物释放的技能
        - trigger (str)：技能触发时机
        - targeter (Targeter)：目标选取器，用于选择技能的施放目标
        - lifeReq (str)：生命条件，要求怪物满足特定的生命值条件才能释放技能
        - lifeReqAmount (float)：生命条件数值，表示满足生命条件的百分比（0-1）
        - period (int)：技能释放的周期，以游戏ticks为单位
        - activeNotInBattle (bool)：是否在战斗状态下也能释放技能
        - targetCondition (ModifierSet)：目标条件限制，要求技能释放的目标满足一定的条件
        - timer (int)：技能释放的计时器，记录距离下次释放的时间
        - summoner (Summoner)：召唤者对象，表示释放技能的怪物召唤者
        - maxTargets (int)：最大目标数，表示技能影响的最大目标数量
        - delay (float)：技能连续释放的间隔时间
        - ignoreSilenced (bool)：是否忽略被沉默状态，即即使怪物被沉默也能释放技能
        - gazeAtTarget (None)：注视目标，保留字段，暂时未使用
        - index (int)：技能序号，用于区分同时存在多个技能的情况
        - mustOnGround (bool)：是否必须站在地面上才能释放技能
        - range (float)：技能的施放范围
        - spellName (str)：技能名称
        - section (dict)：怪物技能的配置信息
    """
    self.typeName = ""  # type: str
    self.spell = Spell()  # type: Spell
    self.trigger = ""  # type: str
    self.targeter = Targeter()  # type: Targeter
    self.lifeReq = ""  # type: str
    self.lifeReqAmount = 0.0  # type: float
    self.period = 0  # type: int
    self.activeNotInBattle = False  # type: bool
    self.targetCondition = ModifierSet()  # type: ModifierSet
    self.timer = 0  # type: int
    self.summoner = Summoner()  # type: Summoner
    self.maxTargets = 0  # type: int
    self.delay = 0.0  # type: float
    self.ignoreSilenced = False  # type: bool
    self.gazeAtTarget = None  # type: None
    self.index = 0  # type: int
    self.mustOnGround = False  # type: bool
    self.range = 0.0  # type: float
    self.spellName = ""  # type: str
    self.section = {}  # type: dict

    def isHealthQualified(self, mob, nowPercent):
        # type: (Mob, float) -> bool
        """
        判断怪物当前的生命百分比是否满足技能释放条件。

        参数：
            mob (Mob)：怪物对象
            nowPercent (float)：怪物当前的生命百分比（0-1）

        返回：
            bool：是否满足生命条件

        """
        pass

    def __repr__(self):
        # type: () -> str
        """
        返回怪物技能的字符串表示。

        返回：
            str：怪物技能的字符串表示

        """
        pass

class ActiveMob:
    """
    表示游戏中一个活动的生物。
    属性：
        - deleted (bool): 表示生物是否已删除的标志。
        - creature (Creature): 与生物相关联的战斗者。
        - spawnLoc (None): 生物的生成位置。
        - barrierBlocks (None): 生物的屏障方块。
        - mobType (MobType): 生物的类型。
        - skills (dict): 与生物相关联的技能字典。
        - previousHealth (int): 生物之前的健康值。
        - dropRate (float): 生物的掉落率。
        - expRate (float): 生物的经验率。
        - title (list): 生物的称号列表。
        - mutations (list): 生物的变异列表。
        - castedSkill (list): 生物释放的技能列表。
        - noAttackSeconds (int): 自上次攻击以来的时间（秒）。
        - lastBattleTime (float): 生物最后一次战斗的时间。
        - lastTickTarget (None): 生物上一次的目标。
        - pastedInstance (set): 生物的复制实例集合。
        - damageComposition (dict): 生物伤害组成的字典。
        - windup (int): 生物的蓄力时间。
        - winddown (int): 生物的冷却时间。
        - riders (list): 生物的乘客列表。
        - initedRide (bool): 表示乘坐是否已初始化的标志。
        - state (int): 生物的状态。0: 静止, 1: 移动, 2: 攻击, 3: 使用技能。
        - attackingTarget (None): 被生物攻击的目标。
        - stateCallback (None): 生物状态更改的回调函数。
        - freezing (int): 生物被冰冻的时间。
        - updateAttackKarmaCountdown (int): 更新攻击因果倒计时。
        - killed (bool): 表示生物是否已被杀死的标志。
        - killLoc (None): 杀死生物的位置。
        - level (None): 生物的等级。
        - rotComp (None): 生物的旋转组件。
        - freezeRot (None): 生物被冰冻后的旋转。
        - actionComp (object): 生物的行动组件。
        - cannotAttackUntil (int): 生物可以再次攻击的时间。
        - registeredSpells (list): 生物注册的已知法术列表。
        - hatred (dict): 生物对周围生物的仇恨字典。
        - currentTarget (None): 生物当前的目标。
        - currentHatred (int): 生物当前的仇恨值。
        - previousSpeed (int): 生物之前的速度。
        - gazeTarget (None): 生物的凝视目标。
        - gazeCancelTaskId (None): 取消凝视的任务ID。
        - freezeTime (int): 生物被冰冻的时间。
        - gazeTaskId (None): 凝视的任务ID。
        - freezeUpdateTaskId (None): 更新冰冻的任务ID。
        - controlAiComp (None): 生物的控制AI组件。
        - blockingAI (bool): 生物AI是否正在阻塞的标志。
        - lookAtTaskId (None): 看向玩家的任务ID。
        - queueingSkills (list): 生物技能队列的列表。
        - healthRefillTask (None): 补满生命值的任务。
        - _healCounter (int): 治疗计数器。
    """
    self.deleted = False  # type: bool
    self.creature = Creature()  # type: Creature
    self.spawnLoc = None  # type: None
    self.barrierBlocks = None  # type: None
    self.mobType = MobType()  # type: MobType
    self.skills = {}  # type: dict
    self.previousHealth = 0  # type: int
    self.dropRate = 0.0  # type: float
    self.expRate = 0.0  # type: float
    self.title = []  # type: list
    self.mutations = []  # type: list
    self.castedSkill = []  # type: list
    self.noAttackSeconds = 0  # type: int
    self.lastBattleTime = 0.0  # type: float
    self.lastTickTarget = None  # type: None
    self.pastedInstance = set()  # type: set
    self.damageComposition = {}  # type: dict
    self.windup = 0  # type: int
    self.winddown = 0  # type: int
    self.riders = []  # type: list
    self.initedRide = False  # type: bool
    self.state = 0  # type: int
    self.attackingTarget = None  # type: None
    self.stateCallback = None  # type: None
    self.freezing = 0  # type: int
    self.updateAttackKarmaCountdown = 0  # type: int
    self.killed = False  # type: bool
    self.killLoc = None  # type: None
    self.level = None  # type: None
    self.rotComp = None  # type: None
    self.freezeRot = None  # type: None
    self.actionComp = object()  # type: object
    self.cannotAttackUntil = 0  # type: int
    self.registeredSpells = []  # type: list
    self.hatred = {}  # type: dict
    self.currentTarget = None  # type: None
    self.currentHatred = 0  # type: int
    self.previousSpeed = 0  # type: int
    self.gazeTarget = None  # type: None
    self.gazeCancelTaskId = None  # type: None
    self.freezeTime = 0  # type: int
    self.gazeTaskId = None  # type: None
    self.freezeUpdateTaskId = None  # type: None
    self.controlAiComp = None  # type: None
    self.blockingAI = False  # type: bool
    self.lookAtTaskId = None  # type: None
    self.queueingSkills = []  # type: list
    self.healthRefillTask = None  # type: None
    self._healCounter = 0  # type: int

    def _lookAtNearestPlayer(self):
        # type: () -> None
        """
        看向最近的玩家。

        此方法查找生物位置最近的玩家并使生物朝向他。

        返回值：
            None
        """
        pass

    def recordDamage(self, attacker, amount, source, reason):
        # type: (str, int, str, str) -> None
        """
        记录受到的伤害。和仇恨无关。若要增加仇恨请用addHatred

        参数：
            attacker (str): 攻击者的名称。
            amount (int): 伤害的数量。
            source (str): 伤害来源。
            reason (str): 伤害的原因。

        返回值：
            None
        """
        pass

    def freeze(self, ticks, blockAI=None):
        # type: (int, None) -> None
        """
        冻结生物一段时间。冻结期间怪物不会移动、攻击、释放技能。但已经触发的技能不受影响

        参数：
            ticks (int): 冻结的时间（以游戏刻为单位）。
            blockAI (None): 阻止生物AI的标志。

        返回值：
            None
        """
        pass

    def triggerEvent(self, eventName):
        # type: (str) -> None
        """
        触发事件。

        参数：
            eventName (str): 事件名称。

        返回值：
            None
        """
        pass

    def hasAnyMutation(self, tags):
        # type: (list) -> False
        """
        检查是否存在任何一种突变。

        参数：
            tags (list): 突变标签列表。

        返回值：
            True: 存在突变。
            False: 不存在突变。
        """
        pass

    def getLevel(self):
        # type: () -> int
        """
        获取等级。

        返回值：
            int: 等级值。
        """
        pass

    def refreshSpells(self):
        # type: () -> None
        """
        刷新技能。

        返回值：
            None
        """
        pass

    def reversePasteInstances(self):
        # type: () -> None
        """
        死亡时自动调用：恢复粘贴的结构，移除生成时放置的屏障方块并将其设置为空气。

        返回值：
            None
        """
        pass

    def onKill(self, victim):
        # type: (victim) -> None
        """
        击杀事件。生物击杀其它生物后触发此事件

        参数：
            victim: 被击杀的目标。

        返回值：
            None
        """
        pass

    def hurtBy(self, damager, amount, reason):
        # type: (damager, amount, reason) -> None
        """
        受伤事件。生物受伤时触发此函数

        参数：
            damager: 造成伤害的实体。
            amount: 伤害数值。
            reason: 伤害原因。

        返回值：
            None
        """
        pass

    def addHatred(self, damager, amount):
        # type: (damager, amount) -> None
        """
        增加仇恨值。

        参数：
            damager: 伤害源实体。
            amount: 伤害数值。

        返回值：
            None
        """
        pass

    def damages(self, victim):
        # type: (victim) -> None
        """
        在对目标造成伤害时，触发此函数。

        参数：
            victim: 受伤的目标。

        返回值：
            None
        """
        pass

    def gazeAt(self, target, ticks):
        # type: (target, ticks) -> None
        """
        注视目标一段时间。

        参数：
            target: 目标实体。
            ticks: 注视的时间（以游戏刻度为单位）。

        返回值：
            None
        """
        pass

    def addRide(self, rider):
        # type: (rider) -> None
        """
        添加骑乘实体。

        参数：
            rider: 骑乘实体。

        返回值：
            None
        """
        pass

    def getTarget(self):
        # type: () -> None
        """
        获取当前攻击目标。

        返回值：
            返回攻击目标实体。如果没有攻击目标，返回None。
        """
        pass

    def setTarget(self, target):
        # type: (target) -> None
        """
        设置攻击目标。

        参数：
            target: 攻击目标实体。

        返回值：
            None
        """
        pass

